package testUnit;
import static org.junit.Assert.*;
import org.junit.*;
import classes_metier.*;

public class MagasinTest{
	Magasin mag1, mag2;
	PC pc1, pc2, pc3;

	@Before
    public void setUp(){
    	mag1 = new Magasin(1, "Paris 17");
    	mag2 = new Magasin(2, "Paris 8");
		pc1 = new PC("Asus", "Tartempion", "A306", mag1);
    	pc2 = new PC("Vaio", "Trucmuche", "V726", mag2);
    	pc3 = new PC("HP", "Tartempion", "H289", mag1);
    }
	
	public void stockerOrdi(){
		mag1.stocker(pc1);
		mag2.stocker(pc2);
		mag2.stocker(pc3);
	}
	
    // US01 - TST01: a la creation, un ordinateur doit etre affecte a un et un seul magasin
	@Test
	public void testAffectation(){
    	assertTrue(pc1.getMag()!=null);
    	assertTrue(pc2.getMag()!=null);
    	assertTrue(pc3.getMag()!=null);

    	//Test si le pc2 appartient seulement au magasin mag2
    	assertFalse(mag1.getStock().containsKey(pc2.getNumSerie()));
    	//Test si le pc1 et pc2 appartiennent seulement au magasin mag1
    	assertFalse(mag2.getStock().containsKey(pc1.getNumSerie()));
    	assertFalse(mag2.getStock().containsKey(pc3.getNumSerie()));
    }
	
	// US01 - TST02: la quantite d'ordinateur stockes dans un magasin > 0
	@Test
	public void pcDansMagasin(){
		stockerOrdi();
		assertTrue(mag1.getStock().size()>0);
		assertTrue(mag2.getStock().size()>0);
		
		mag1.afficherStock();
		mag2.afficherStock();
	}
	
	// US01: un pc peut etre transporte vers un autre magasin apres destocke de son magasin
	@Test
	public void transporterPC(){
		stockerOrdi();
		PC newAsus = mag2.destocker("V726"); 
		assertTrue(newAsus.getMag()==null);
		mag1.stocker(newAsus);
		assertEquals(mag1.getStock().size(),2);
		assertEquals(newAsus.getMag(), mag1);
	}
}
